package com.dt.common.validation.parser;

import java.util.Collection;
import java.util.HashMap;
import java.util.Map;

import com.dt.common.validation.annotation.DateStr;
import com.dt.common.validation.annotation.DecimalMax;
import com.dt.common.validation.annotation.DecimalMin;
import com.dt.common.validation.annotation.Max;
import com.dt.common.validation.annotation.Min;
import com.dt.common.validation.annotation.NotBlank;
import com.dt.common.validation.annotation.NotNull;
import com.dt.common.validation.annotation.Option;
import com.dt.common.validation.annotation.Pattern;
import com.dt.common.validation.annotation.Size;

public class DefinitionParsers {

	private static final Map<String, DefinitionParser> PARSERS = new HashMap<>();
	static {

		PARSERS.put(NotNull.class.getSimpleName(), new NotNullDefinitionParser());
		PARSERS.put(NotBlank.class.getSimpleName(), new NotBlankDefinitionParser());
		PARSERS.put(Size.class.getSimpleName(), new SizeDefinitionParser());
		PARSERS.put(Min.class.getSimpleName(), new MinDefinitionParser());
		PARSERS.put(Max.class.getSimpleName(), new MaxDefinitionParser());
		PARSERS.put(DecimalMax.class.getSimpleName(), new DecimalMaxDefinitionParser());
		PARSERS.put(DecimalMin.class.getSimpleName(), new DecimalMinDefinitionParser());
		PARSERS.put(Pattern.class.getSimpleName(), new PatternDefinitionParser());
		PARSERS.put(Option.class.getSimpleName(), new OptionDefinitionParser());
		PARSERS.put(DateStr.class.getSimpleName(), new DateStrDefinitionParser());
	}

	private DefinitionParsers() {
	};

	public static Collection<String> getPaserTypes() {
		return PARSERS.keySet();
	}

	public static DefinitionParser getParser(String type) {
		return PARSERS.get(type);
	};

}
